From 7aa2bfdc774bde4ac58f18533f03679cd5833421 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timm=20B=C3=A4der?= Date: Wed, 7 Oct 2015 11:26:53 +0200 Subject: [PATCH] Add gtk-query-settings A small utility binary to query all properties of GtkSettings. https://bugzilla.gnome.org/show_bug.cgi?id=756174 --- docs/reference/gtk/Makefile.am | 6 +- docs/reference/gtk/gtk-docs.sgml | 1 + docs/reference/gtk/gtk-query-settings.xml | 45 +++++++++++++++ gtk/Makefile.am | 7 +++ gtk/gtk-query-settings.c | 70 +++++++++++++++++++++++ 5 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 docs/reference/gtk/gtk-query-settings.xml create mode 100644 gtk/gtk-query-settings.c diff --git a/docs/reference/gtk/Makefile.am b/docs/reference/gtk/Makefile.am index 24d951c9eb..63cd349c72 100644 --- a/docs/reference/gtk/Makefile.am +++ b/docs/reference/gtk/Makefile.am @@ -315,7 +315,8 @@ content_files = \ input-handling.xml \ visual_index.xml \ getting_started.xml \ - overview.xml + overview.xml \ + gtk-query-settings.xml expand_content_files = \ compiling.sgml \ @@ -499,7 +500,8 @@ man_MANS = \ gtk3-widget-factory.1 \ gtk3-icon-browser.1 \ broadwayd.1 \ - gtk-builder-tool.1 + gtk-builder-tool.1 \ + gtk-query-settings.1 if ENABLE_MAN diff --git a/docs/reference/gtk/gtk-docs.sgml b/docs/reference/gtk/gtk-docs.sgml index 2198a4a9ff..9194c4722d 100644 --- a/docs/reference/gtk/gtk-docs.sgml +++ b/docs/reference/gtk/gtk-docs.sgml @@ -406,6 +406,7 @@ + diff --git a/docs/reference/gtk/gtk-query-settings.xml b/docs/reference/gtk/gtk-query-settings.xml new file mode 100644 index 0000000000..52f9638e07 --- /dev/null +++ b/docs/reference/gtk/gtk-query-settings.xml @@ -0,0 +1,45 @@ + + + + + + gtk-query-settings + GTK+ + + + Developer + Timm + Bäder + + + + + + gtk-query-settings + 1 + User Commands + + + + gtk-query-settings + Utility to print name and value of all GtkSettings properties + + + + +gtk-query-settings +PATTERN + + + +Description + + gtk-query-settings prints both name and value of all properties + available in the GtkSettings class. Optionally, you can filter which properties + to list by specifying a PATTERN. + + + + diff --git a/gtk/Makefile.am b/gtk/Makefile.am index bf33c8514e..88e30f8991 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -1404,6 +1404,7 @@ bin_PROGRAMS = \ gtk-update-icon-cache \ gtk-encode-symbolic-svg \ gtk-builder-tool \ + gtk-query-settings \ gtk-launch gtk_query_immodules_3_0_SOURCES = queryimmodules.c @@ -1428,6 +1429,12 @@ gtk_builder_tool_LDADD = \ $(top_builddir)/gdk/libgdk-3.la \ $(GTK_DEP_LIBS) +gtk_query_settings_SOURCES = gtk-query-settings.c +gtk_query_settings_LDADD= \ + libgtk-3.la \ + $(top_builddir)/gdk/libgdk-3.la \ + $(GTK_DEP_LIBS) + gtk_launch_SOURCES = gtk-launch.c gtk_launch_LDADD = \ libgtk-3.la \ diff --git a/gtk/gtk-query-settings.c b/gtk/gtk-query-settings.c new file mode 100644 index 0000000000..cf1e476db9 --- /dev/null +++ b/gtk/gtk-query-settings.c @@ -0,0 +1,70 @@ +#include +#include +#include + + +int +main (int argc, char **argv) +{ + GtkSettings *settings; + GParamSpec **props; + guint n_properties; + int i; + int max_prop_name_length = 0; + gchar *pattern = NULL; + + gtk_init (&argc, &argv); + + if (argc > 1) + pattern = argv[1]; + + settings = gtk_settings_get_default (); + props = g_object_class_list_properties (G_OBJECT_GET_CLASS (settings), &n_properties); + + for (i = 0; i < n_properties; i ++) + { + int len = strlen (props[i]->name); + + if (len > max_prop_name_length) + max_prop_name_length = len; + } + + + for (i = 0; i < n_properties; i ++) + { + GValue value = {0}; + GParamSpec *prop = props[i]; + gchar *value_str; + int spacing = max_prop_name_length - strlen (prop->name); + + if (pattern && !g_strrstr (prop->name, pattern)) + continue; + + g_value_init (&value, prop->value_type); + g_object_get_property (G_OBJECT (settings), prop->name, &value); + + if (G_VALUE_HOLDS_ENUM (&value)) + { + GEnumClass *enum_class = G_PARAM_SPEC_ENUM (prop)->enum_class; + GEnumValue *enum_value = g_enum_get_value (enum_class, g_value_get_enum (&value)); + + value_str = g_strdup (enum_value->value_name); + } + else + { + value_str = g_strdup_value_contents (&value); + } + + for (; spacing >= 0; spacing --) + printf (" "); + + printf ("%s: %s\n", prop->name, value_str); + + g_free (value_str); + g_value_unset (&value); + } + + g_free (props); + + return 0; +} -- 2.30.2